package com.example.mq.common;

import com.example.mq.mqserver.core.BasicProperties;

import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ws
 * Date: 2023-10-05
 * Time: 13:43
 */

/*
 * lambda 表达式的本质就是匿名函数
 * 由于 Java 的函数不能脱离类而存在，所以为了实现 lambda 表达式，引入了函数式接口
 * 函数式接口（lambda 的本质，底层的实现）：
 * 1. interface
 * 2. 只能有一个方法
 * 3. @FunctionalInterface 注解
 */

// 回调函数，收到消息后要处理消息调用的方法
@FunctionalInterface
public interface Consumer {
    // Delivery 投递，这个方法预期是每次服务器收到消息之后，来调用
    // 通过这个方法把消息推送给对应的消费者
    // 这里的方法名和参数都是参考 RabbitMQ
    void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException;
}
